/**
 * 查询列表,用query为参数调用函数f
 * @param f 执行的函数
 * @param query 传递给函数的参数.如果为空则增加分页参数 {pageSize: 10000}
 */
export function getItems(f: (params: object) => any, query?: object) {
    query = query || {pageSize: 10000};
    return f(query);
}

/**
 * 把response.data.list中的{id:1,name:""}转换到{key:"",value:""}对象数组
 * @param response
 * @param k
 * @param v
 */
export function setItems(response: any, k?: string, v?: string): Array<ItemOptions> {
    const data: Array<ItemOptions> = [];
    k = k || 'id';
    v = v || 'name';
    if (response.data && response.data.list && response.data.list.length > 0) {
        response.data.list.forEach((e: any) => {
            data.push({key: e[k].toString(), value: e[v].toString()});
        });
    }
    return data;
}

// 选项类型接口
export interface ItemOptions {
    key: string,
    value: string
}

/**
 * 获取 options 指定的数组获取 key 对应的 value
 * @param key 要找到的key
 * @param options 待查找的数组
 * @param keyName 查找对象数组时,对应的key的名称
 * @param valName 查找对象数组时,对应的value的名称
 * */
export function getOptionValue(key: any, options: Array<any>, keyName?: string, valName?: string) {
    keyName = keyName ?? 'key'
    valName = valName ?? 'value'
    const option = options.find((item) => {
        return key + '' === item[keyName];
    });
    if (option !== undefined) {
        return option[valName];
    }
}

/**
 * 检查对象是否为空
 * 1.undefined<br/>
 * 2.null<br/>
 * 3.空白字符<br/>
 * 4.数组长度为0<br/>
 * 5.对象没有任何属性<br/>
 * @param v
 */
export function isEmpty(v: any) {
    if (v === '' || v === undefined || v === null) {
        return true;
    }

    if (typeof v === 'object') {
        if (Array.isArray(v)) {
            return v.length === 0;
        } else {
            return Object.keys(v).length === 0;
        }
    }
    return false;
}
